class people:
    """描述一个中国人类"""
    # 私有方法、私有属性
    # 1.私有属性：必须以双下划线开头，只能类内部进行访问 __name
    # 2.私有方法：必须以双下划线开头，只能类内部进行调用 __testmethod
    # 3.两者可以通过  对象名._类名+私有属性/私有方法      访问
    __weight =90
    def __test(self):
        print("这是一个私有方法")
        print(f"告诉你一个秘密，我的体重是：{self.__weight}")
    #属性
    fuse="yellow"
    language="cn"
    @staticmethod    #类的静态方法  类和对象的公共方法
    def static_method():
        print("这是一个静态方法")
    @classmethod    #类方法
    def class_method(cls):
        print("这是一个类方法")

    #内置方法
        #指定的方法名，执行特定任务
        #方法名有规则：方法名前后有双下划线
        #__del__(self)  析构方法
        #__str__(self，。。)自定义实例输出内容
        #—__getattrbute()获取实例属性
    #构造方法，实例化时调用
    def __init__(self,name,classname):
        print(f"实例化了一个对象,名称{name},班级{classname}")
        self.name = name    #实例属性，只有对象私有
        self.classname = classname
    def __str__(self):
        return"欢迎来到这里0320"
    def __getattribute__(self, item):   #获取实例属性的值，可直接结合对象使用
        if item=="name":
            return "名称"
    #行为
    def speak(self):
        print("我说的就是中国话")
        print(f"告诉你一个秘密，我的体重是：{self.__weight}")


DD =people("dd",223)
#DD.speak()
print(DD)   #调用了__self__方法
print(DD.name)  #调用了__getattribute__
print("获取DD同学的特征",DD.language,DD.fuse)
print(people.__doc__)

class TestClass:
    num=0
    @classmethod
    def add_Stunum(cls):
        cls.num +=1
    def __init__(self):
        TestClass.add_Stunum()
class Student(TestClass):
    pass

a=Student()
b=Student()
c=Student()
ff: people=people("liu",22)
ff.speak()
print(TestClass.num)

# if __name__ =='__main__':   #当此模块被别的调用时，此行代码不会运行 """用于调试代码"""